package co.edu.ucatolica.sislab.persistence.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import co.edu.ucatolica.sislab.persistence.DatabaseException;
import co.edu.ucatolica.sislab.persistence.DatabasePersistorHelper;
import co.edu.ucatolica.sislab.persistence.dto.SancionDTO;
import co.edu.ucatolica.sislab.persistence.utils.DatabaseOperations;
import co.edu.ucatolica.sislab.persistence.utils.PersistenceUtils;
import co.edu.ucatolica.sislab.persistence.utils.SQLSISLABDBConstants;
import co.edu.ucatolica.sislab.utils.DatabaseTables;

public class SancionPersitorHelper {
	private static Logger logger = LoggerFactory.getLogger(SancionPersitorHelper.class);
	
	public static Long createSancion(Long transactionNumber,SancionDTO sancionDTO) throws DatabaseException {
		Connection dbConnection = null;
		PreparedStatement ps = null;
		try {
			dbConnection = DatabasePersistorHelper.getConexion(transactionNumber);
			String sql = DatabasePersistorHelper.getSql(SQLSISLABDBConstants.SQL_CREATE_SANCION_DATA);
			
			if ((dbConnection != null) && (sql != null)) {
				ps = dbConnection.prepareStatement(sql);
				ps.setLong(1, sancionDTO.getCastigoId());
				ps.setLong(2, sancionDTO.getMotivoId());
				ps.setLong(3, sancionDTO.getUserId());							
				ps.execute();
				
				return DatabasePersistorHelper.getIdentity(dbConnection);
			}
		} catch (DatabaseException e) {
			logger.error("No fue posible insertar en la tabla sanciones: " + sancionDTO.getUserId() + " - " + e.getMessage());
			throw new DatabaseException(DatabaseTables.SANCIONES, DatabaseOperations.INSERT, e.toString());
		} catch (SQLException e) {
			logger.error("No fue posible insertar en la tabla sanciones: " + sancionDTO.getUserId() + " - " + e.getMessage());
			throw new DatabaseException(DatabaseTables.SANCIONES, DatabaseOperations.INSERT, e.toString());
		} finally {
			PersistenceUtils.closeConnectionIssues(ps);
		}
		return null;		
	}

}
